home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / util / rexx / cliped111.lha / cliped / cliped.rexx < prev   
Encoding:
OS/2 REXX Batch file  |  1998-09-08  |  12.8 KB  |  453 lines

  1. /*
  2. ** $VER: cliped.rexx 1.11 (30.8.98) Rolf Rotvel
  3. **
  4. ** Uses rexxreqtools.library
  5. */
  6.  
  7. call addlib('rexxreqtools.library', 0, -30, 0)
  8. call addlib('rexxsupport.library', 0, -30, 0)
  9.  
  10. rxlv.width = 300
  11. rxlv.height = 200
  12.  
  13. nl = '0a'x
  14. cr = '0d'x
  15. sep = 'ยค'
  16.  
  17. defgads = '_Ok|_Cancel'
  18. title = 'ClipEd 'word(sourceline(2), 4)
  19.  
  20. call rxlv_init()
  21. call get_clips()
  22.  
  23. do forever
  24.      num = rxlv_main(title'  ['numclips']  <HELP> for keys.', 'dDeEqQrRnNuU')   
  25.      upkey = upper(rxlv.key)
  26.      select
  27.          when (upkey = 'D' | upkey = 'DEL') & num > 0 then call delete_clip(num)
  28.          when (upkey = 'Q' | upkey = 'ESC') then exit
  29.          when upkey = 'E' & num > 0 then call edit_clip(num)
  30.          when upkey = 'N' then call create_clip()
  31.          when upkey = 'R' then call rename_clip(num)
  32.          when upkey = 'U' then call get_clips()
  33.          otherwise do       /* 'RET' */
  34.              if num > 0 then call view_clip(num)
  35.          end
  36.      end
  37. end
  38.  
  39.  
  40. GET_CLIPS:
  41. clipnames = show('c',, sep)
  42.  
  43. if clipnames ~= '' then do
  44.     c = 1
  45.     len = 0
  46.     do forever
  47.         parse var clipnames clip.name.c (sep) clipnames
  48.  
  49.         if clip.name.c = '' then leave  /* No more clips */
  50.  
  51.         clip.value.c = checklf(getclip(clip.name.c))    /* Check clips for lf/cr */
  52.  
  53.         len = max(len, length(clip.name.c))
  54.         c = c + 1
  55.     end
  56.     numclips = c - 1
  57.  
  58.     do f = 1 to numclips
  59.         viewline.f = left(left(clip.name.f, len)' : 'clip.value.f, rxlv.dispcols)
  60.     end
  61. end
  62. else numclips = 0
  63.  
  64. viewline.0 = numclips
  65. return
  66.  
  67.  
  68. VIEW_CLIP: 
  69. arg clipnum
  70.  
  71. body = 'Name  : 'clip.name.clipnum||nl'Value : 'clip.value.clipnum
  72. gads = '_Edit clip|_Delete clip|_Rename clip|_Cancel'
  73.  
  74. ans = rtezrequest(body, gads, title)
  75.  
  76. select
  77.     when ans = 0 then nop
  78.     when ans = 1 then call edit_clip(clipnum)
  79.     when ans = 2 then call delete_clip(clipnum)
  80.     when ans = 3 then call rename_clip(clipnum)
  81.     otherwise exit 10
  82. end
  83. return
  84.  
  85.  
  86. EDIT_CLIP: 
  87. arg clipnum
  88. body = 'Enter new value for 'clip.name.clipnum
  89.  
  90. ans = rtgetstring(clip.value.clipnum, body, title, defgads)
  91. if rtresult = 0 | ans = '' then return
  92.  
  93. if confirm('Use this value?', clip.name.clipnum, ans,,) then do
  94.     call setclip(clip.name.clipnum, addlf(ans))     /* Convert \nl \cr -> nl cr */
  95.     call get_clips()
  96. end                                
  97. return
  98.  
  99.  
  100. RENAME_CLIP: 
  101. arg clipnum
  102. body = 'Enter new name for 'clip.name.clipnum
  103.  
  104. ans = rtgetstring(clip.name.clipnum, body, title, defgads)
  105. if rtresult = 0 | ans = '' then return
  106.  
  107. do chk = 1 to numclips
  108.     if clip.name.chk = ans then do
  109.         if confirm('Clip already exists! Overwrite it?'||'0a'x||'Name     : '||,
  110.                     ans, clip.value.chk, clip.value.clipnum, 'Old value: ', 'New value: ') then do
  111.             call setclip(clip.name.clipnum, '')
  112.             call setclip(ans, clip.value.clipnum)
  113.             call get_clips()
  114.         end
  115.         return
  116.     end
  117. end
  118.  
  119. if confirm('Rename clip?', clip.name.clipnum, ans, 'Old name: ', 'New name: ') then do
  120.     call setclip(clip.name.clipnum, '')
  121.     call setclip(ans, clip.value.clipnum)
  122.     call get_clips()
  123. end
  124. return
  125.  
  126.  
  127. DELETE_CLIP: 
  128. arg clipnum
  129.  
  130. if confirm('Delete this clip?', clip.name.clipnum, clip.value.clipnum) then do
  131.     call setclip(clip.name.clipnum, '')
  132.     call get_clips()
  133. end                                
  134. return
  135.  
  136.  
  137. CREATE_CLIP: 
  138. newname = rtgetstring(, 'Enter the name of the new clip', title, defgads)
  139. if rtresult = 0 | newname = '' then return
  140.  
  141. chkvalue = getclip(newname)
  142. if chkvalue ~= '' then do
  143.     do clipcount = 1 to numclips
  144.         if clip.name.clipcount = newname then leave
  145.     end
  146.     if confirm('Clip already exists! Change value?', clip.name.clipcount, clip.value.clipcount) then do
  147.         call edit_clip(clipcount)
  148.     end
  149. end
  150. else do
  151.     newvalue = rtgetstring(, 'Enter the value of the new clip', title, defgads)
  152.     if rtresult = 0 | newvalue = '' then return
  153.  
  154.     if confirm('Create this clip?', newname, newvalue) then do
  155.         call setclip(newname, addlf(newvalue))
  156.         call get_clips()
  157.     end
  158. end
  159. return
  160.  
  161.  
  162. CONFIRM: procedure expose title nl defgads
  163. parse arg txt, name, value, pre1, pre2
  164.  
  165. if pre1 = '' then pre1 = 'Name  : '
  166. if pre2 = '' then pre2 = 'Value : '
  167.  
  168. body = txt||nl||pre1||name||nl||pre2||value
  169.  
  170. if rtezrequest(body, defgads, title) then return 1
  171. return 0
  172.  
  173.  
  174. RXLV_HELP: procedure
  175. nl = '0a'x
  176. helptxt = ' Use Cursor/Shift Cursor to'nl,
  177.           'move and Enter to select.'nl,
  178.           '---------------------------'nl,
  179.           'd or Delete: Delete clip'nl,
  180.           'e: Edit clip value'nl,
  181.           'r: Rename clip'nl,
  182.           'n: Create a new clip'nl,
  183.           'u: Update the cliplist'nl,
  184.           'q or Escape: Quit ClipEd'                       
  185.  
  186. call rtezrequest(helptxt)
  187. return
  188.  
  189.  
  190. RXLV_MAIN: procedure expose viewline. rxlv.
  191. parse arg titletxt, inlinechars
  192.  
  193. /* Reset key */
  194. rxlv.key = ''
  195.  
  196. /* Which is bigger - win rows or lines in stemvar? */
  197. if rxlv.disprows > viewline.0 then rxlv.actrows = viewline.0
  198. else rxlv.actrows = rxlv.disprows
  199.  
  200. /* Get current mouse coordinates */
  201. call forbid
  202. screen = next(rxlv.intui, 56)                         /* IntuitionBase->ActiveScreen */
  203. mousex = c2d(import(offset(screen, 18), 2)) - 50      /* Screen->MouseX */
  204. mousey = c2d(import(offset(screen, 16), 2)) - 50      /* Screen->MouseY */
  205. call permit
  206.  
  207. /* Open the listview */
  208. call open(rxlv.win, 'RAW:'mousex'/'mousey'/'rxlv.width'/'rxlv.height'/'titletxt'/NOSIZE', 'w')
  209. call writech(rxlv.win, rxlv.nocursor||rxlv.nowordwrap)
  210.  
  211. /* Initialize window */
  212. if viewline.0 > 0 then do
  213.     rxlv.row = 1 
  214.     rxlv.var = 1
  215.     rxlv.topvar = 1 
  216.     call writech(rxlv.win, rxlv_getlighty(rxlv.row, rxlv.var)||rxlv.nl||rxlv_getpage(rxlv.var + 1))
  217. end
  218.  
  219. /* Do ze stuff */
  220. do forever
  221.     rxlv.oldrow = rxlv.row 
  222.     rxlv.oldvar = rxlv.var
  223.  
  224.     char = readch(rxlv.win, 1)
  225.     select
  226.         when char = rxlv.csi then do
  227.             char = readch(rxlv.win, 1)
  228.             select
  229.                 when viewline.0 < 2 then nop
  230.                 when char = rxlv.cursordown then do
  231.                     if rxlv.oldvar ~= viewline.0 then do
  232.                         line = rxlv_getunlighty()
  233.                         rxlv.var = rxlv.var + 1
  234.  
  235.                         if rxlv.oldrow < rxlv.actrows then rxlv.row = rxlv.row + 1 
  236.                         else do
  237.                             line = line||rxlv.nl
  238.                             rxlv.row = rxlv.actrows
  239.                             rxlv.topvar = rxlv.topvar + 1
  240.                         end
  241.                         call writech(rxlv.win, line||rxlv_getlighty())
  242.                     end
  243.                     else call rxlv_top()
  244.                 end  
  245.                 when char = rxlv.cursorup then do
  246.                     if rxlv.oldvar ~= 1 then do
  247.                         line = rxlv_getunlighty()
  248.                         rxlv.var = rxlv.var - 1
  249.  
  250.                         if rxlv.oldrow ~= 1 then do
  251.                             rxlv.row = rxlv.row - 1
  252.                             call writech(rxlv.win, line||rxlv_getlighty())
  253.                         end
  254.                         else do
  255.                             rxlv.row = 1 
  256.                             rxlv.topvar = rxlv.topvar - 1
  257.                             call writech(rxlv.win, line||rxlv_getlighty()||rxlv.nl||rxlv_getpage(rxlv.var + 1))
  258.                         end            
  259.                     end
  260.                     else call rxlv_bottom()                  
  261.                 end
  262.                 when char = rxlv.scursorup then do
  263.                     if rxlv.oldvar ~= 1 then do
  264.                         rxlv.row = 1
  265.                         rxlv.var = rxlv.topvar
  266.  
  267.                         if rxlv.oldrow = 1 then do
  268.                             if rxlv.oldvar - rxlv.actrows < 1 then rxlv.topvar = 1
  269.                             else rxlv.topvar = rxlv.oldvar - rxlv.actrows
  270.                             rxlv.var = rxlv.topvar
  271.                             call writech(rxlv.win, rxlv.cls||rxlv_getlighty()||rxlv.nl||rxlv_getpage(rxlv.topvar + 1))
  272.                         end
  273.                         else call writech(rxlv.win, rxlv_getunlighty()||rxlv_getlighty())
  274.                     end
  275.                     else call rxlv_bottom()                  
  276.                 end
  277.                 when char = rxlv.scursordown then do
  278.                     if rxlv.oldvar ~= viewline.0 then do
  279.                         rxlv.row = rxlv.actrows
  280.  
  281.                         if rxlv.oldrow = rxlv.actrows then do
  282.                             if rxlv.oldvar + rxlv.actrows > viewline.0 then rxlv.topvar = viewline.0 - (rxlv.actrows - 1)
  283.                             else rxlv.topvar = rxlv.oldvar + 1
  284.                             rxlv.var = min(viewline.0, rxlv.topvar + (rxlv.actrows - 1))
  285.                             call writech(rxlv.win, rxlv.cls||rxlv_getpage(rxlv.topvar)||rxlv.nl||rxlv_getlighty())
  286.                         end
  287.                         else do
  288.                             rxlv.var = (rxlv.topvar + rxlv.actrows) - 1
  289.                             call writech(rxlv.win, rxlv_getunlighty()||rxlv_getlighty())
  290.                         end
  291.                     end
  292.                     else call rxlv_top()
  293.                 end
  294.                 otherwise nop
  295.             end
  296.         end
  297.         when char = rxlv.esc then do
  298.             rxlv.key = 'ESC'
  299.             return rxlv_close()
  300.         end
  301.         when char = rxlv.cr then do
  302.             rxlv.key = 'RET'
  303.             return rxlv_close()
  304.         end
  305.         when char = rxlv.del then do
  306.             rxlv.key = 'DEL'
  307.             return rxlv_close()
  308.         end
  309.         when pos(char, inlinechars) > 0 then do
  310.             rxlv.key = char
  311.             return rxlv_close()
  312.         end
  313.         when char = rxlv.help then call rxlv_help()
  314.         otherwise nop
  315.     end
  316. end
  317.  
  318.  
  319. RXLV_CLOSE: procedure expose rxlv. viewline.
  320. call close(rxlv.win)
  321. if viewline.0 = 0 then return 0
  322. return rxlv.oldvar
  323.  
  324.  
  325. RXLV_TOP: procedure expose rxlv. viewline.
  326. rxlv.var = 1
  327. rxlv.row = 1
  328.  
  329. if rxlv.topvar = 1 then do   /* Just move to top */
  330.     line = rxlv_getunlighty()
  331.     call writech(rxlv.win, line||rxlv_getlighty())
  332. end
  333. else do
  334.     rxlv.topvar = 1
  335.     call writech(rxlv.win, rxlv.cls||rxlv_getlighty()||rxlv.nl||rxlv_getpage(rxlv.var + 1))
  336. end
  337. return
  338.  
  339.  
  340. RXLV_BOTTOM: procedure expose rxlv. viewline.
  341. rxlv.var = viewline.0
  342.  
  343. if viewline.0 <= rxlv.actrows then do 
  344.     line = rxlv_getunlighty()
  345.     rxlv.row = viewline.0
  346.     call writech(rxlv.win, line||rxlv_getlighty())
  347. end
  348. else do
  349.     rxlv.row = rxlv.actrows
  350.     rxlv.topvar = (viewline.0 - rxlv.actrows) + 1
  351.     call writech(rxlv.win, rxlv.cls||rxlv_getpage(rxlv.topvar)||rxlv.nl||rxlv_getlighty())
  352. end
  353. return
  354.  
  355.  
  356. RXLV_GETPAGE: procedure expose viewline. rxlv.
  357. if viewline.0 = 1 then return ''
  358.  
  359. top = arg(1)
  360. page = ''
  361. do y = 1 to rxlv.actrows - 2                    /* Lines between first and last */
  362.     page = page||viewline.top||rxlv.nl
  363.     top = top + 1
  364. end 
  365. page = page||viewline.top                       /* No newline after last line */
  366. return page
  367.  
  368.  
  369. RXLV_GETUNLIGHTY: procedure expose rxlv. viewline. 
  370. var = rxlv.oldvar
  371. return rxlv.csi||rxlv.oldrow'H'viewline.var
  372.  
  373.  
  374. RXLV_GETLIGHTY: procedure expose rxlv. viewline. 
  375. var = rxlv.var
  376. return rxlv.csi||rxlv.row'H'rxlv.hilite||viewline.var||rxlv.off
  377.  
  378.  
  379. RXLV_INIT: procedure expose rxlv.
  380. /* Hardcoded minimum values */
  381. rxlv.width = max(100, rxlv.width)
  382. rxlv.height = max(50, rxlv.height)
  383.  
  384. /* ANSI stuff */
  385. rxlv.csi = '9b'x  ; rxlv.esc = '1b'x
  386. rxlv.help = '7e'x ; rxlv.del = '7f'x
  387. rxlv.nl = '0a'x   ; rxlv.cr = '0d'x
  388. rxlv.off = rxlv.csi||'0m' 
  389. rxlv.topleft = rxlv.csi'48'x 
  390. rxlv.cls = rxlv.csi'H'rxlv.csi'J'
  391. rxlv.hilite = rxlv.csi'43;32m'
  392. rxlv.nowordwrap = rxlv.csi||'3f376c'x
  393. rxlv.nocursor = rxlv.csi||'302070'x 
  394. rxlv.cursorup = '41'x  ; rxlv.cursordown = '42'x 
  395. rxlv.scursorup = '54'x ; rxlv.scursordown = '53'x
  396. rxlv.win = 'listwin'
  397.  
  398. /* GUI constants */
  399. guiheight = 7 ; guiwidth = 8
  400.  
  401. /* Font info */
  402. rxlv.intui = showlist(l, 'intuition.library',, a)
  403. call forbid
  404. screen = next(rxlv.intui, 56)               /* IntuitionBase->ActiveScreen */
  405. font = next(screen, 136)                    /* Screen->RastPort.Font */
  406. fonty = c2d(import(offset(font, 20), 2))    /* Font->YSize */
  407. fontx = c2d(import(offset(font, 24), 2))    /* Font->XSize */
  408. call permit
  409.  
  410. /* Listview width */
  411. do while (rxlv.width - guiwidth) // fontx ~= 0 
  412.     rxlv.width = rxlv.width + 1 
  413. end
  414. rxlv.dispcols = ((rxlv.width - guiwidth) % fontx)
  415. rxlv.filler = copies(' ', rxlv.dispcols)
  416.  
  417. /* Listview height */
  418. const = guiheight + fonty
  419. do while (rxlv.height - const) // fonty ~= 0 
  420.     rxlv.height = rxlv.height + 1 
  421. end
  422. rxlv.disprows = (rxlv.height - const) % fonty
  423.  
  424. return
  425.  
  426.  
  427. REPLACE: procedure
  428. parse arg src, old, new
  429.  
  430. olen = length(old)
  431.  
  432. do forever
  433.     m = pos(old, src)
  434.     if m = 0 then leave
  435.     
  436.     src = insert(new, delstr(src, m, olen), m - 1)
  437. end
  438. return src
  439.  
  440.  
  441. CHECKLF: procedure expose nl cr
  442. str = arg(1)
  443. if pos(nl, str) > 0 then str = replace(str, nl, '\n')
  444. if pos(cr, str) > 0 then str = replace(str, cr, '\r')
  445. return str
  446.  
  447.  
  448. ADDLF: procedure expose nl cr
  449. str = arg(1)
  450. if pos('\n', str) > 0 then str = replace(str, '\n', nl)
  451. if pos('\r', str) > 0 then str = replace(str, '\r', cr)
  452. return str
  453.